/*
 * @Descripttion:
 * @Author: xiaodong
 * @Date: 2020-09-07 16:17:39
 */
import store from "@/store"; // 引入状态共享

/**
 * @description  启动qiankun应用间通信机制
 * @param {Function} initGlobalState 官方通信函数
 * @description 注意：主应用是从qiankun中导出的initGlobalState方法，
 * @description 注意：子应用是附加在props上的onGlobalStateChange, setGlobalState方法（只用主应用注册了通信才会有）
 */
const appStore = initGlobalState => {
    /**
     * @description  初始化数据内容
     */
    const { onGlobalStateChange, setGlobalState } = initGlobalState({
        userInfo: store.getters.userInfo,
        token: store.getters.token,
        appsRefresh: false,
    });

    /**
     * @description  监听数据变动 
     * @param {Function} 监听到数据发生改变后的回调函数
     * @des 将监听到的数据存入vuex
     */
    onGlobalStateChange((value, prev) => {
        //存入用户信息给其他子应用
        "userInfo" in value && store.dispatch("user/setUserInfo", value.userInfo);
        value.token && store.dispatch("app/setToken", value.token);
        value.appsRefresh && window?.location?.reload?.();
    });

    /**
     * @description  改变数据并向所有应用广播
     */
    setGlobalState({
        ignore: "portal",
        msg: "来自门户设定的用户消息",
    });
};

export default appStore;
